package com.wuyb.mapper;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.wuyb.pojo.Meeting;
import com.wuyb.pojo.MeetingUser;
import com.wuyb.pojo.User;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Component;

import java.io.Serializable;
import java.time.LocalDateTime;
import java.util.List;

/**
 * Created with IntelliJ IDEA.
 *
 * @Author: wyb
 * @Date: 2024/01/01/14:35
 * @Description:
 */
@Component
public interface MeetingMapper extends BaseMapper<Meeting> {

    /**
     * 重写的通过Id查询会议
     * @param id
     * @return
     */
    @Override
    Meeting selectById(@Param("mid") Serializable id);


    /**
     * 会议和创建的用户一一对应，输出列表
     * @param page
     * @param wrapper
     * @return
     */
    IPage<Meeting> selectMeetingByCreater(Page<Meeting> page, @Param("ew") QueryWrapper<Meeting> wrapper);


    /**
     * 输出Id对应的会议和创建者User 输出一个
     * @param meetId
     * @return
     */
    Meeting selectMeetingByCreaterOne(@Param("meeting_id") String meetId);


    /**
     * 输出当前用户参与的会议列表
     * @param page
     * @param id
     * @param wrapper
     * @return
     */
    IPage<Meeting> selectMeetingByParticipants(Page<Meeting> page, @Param("user_id") Integer id, @Param("ew") QueryWrapper<MeetingUser> wrapper);


    /**
     * 获取用户参与的会议表中是否存在此会议
     * @param meetId
     * @param userId
     * @return
     */
    Meeting getExistMeetByUser(@Param("meeting_id") String meetId, @Param("user_id") Integer userId);


    /**
     * 输出会议的参与者列表
     * @param meetId
     * @return
     */
    List<User> selectOneByParticipantId(@Param("meeting_id") String meetId);


    /**
     * 查询出用户参与过的会议（历史会议）
     * @param objectPage
     * @param id
     * @return
     */
    IPage<Meeting> selectMeetingByParticipantsEnd(Page<Meeting> objectPage, @Param("user_id") Integer id);

    /**
     * 结束会议，写上结束时间
     * @param mid
     * @param now
     * @return
     */
    Integer updateEndDate(@Param("mid") String mid, @Param("endDate") String now);

    /**
     * 根据ID删除自己参与的会议（历史会议）
     * @param mid
     * @param uid
     * @return
     */
    Integer delHistoryMeting(@Param("mid") String mid, @Param("uid") Integer uid);

    /**
     * 获取所有会议的开始时间
     * @param withoutEnd
     * @return
     */
    List<LocalDateTime> selectAllStartDateTime(@Param("withoutEnd") Boolean withoutEnd);
}
